// 从 https://www.npmjs.com/package/axios-adapter-uniapp 复制过来的。
import axios from 'axios';
import axiosAdapterUniapp from 'axios-adapter-uniapp';

const $https = axios.create({
  // 添加根路径
  baseURL: 'https://api-hmugo-web.itheima.net/api/public/v1',
  adapter: axiosAdapterUniapp,
});

// 请求计数器
let httpsCount = 0;

// 添加请求拦截器
$https.interceptors.request.use(function (config) {
  // 包含 /my/ 路径的请求地址，都需要带上 Authorization 请求头
  if (config.url.includes('/my/')) {
    // 获取本地存储的 token
    const token = uni.getStorageSync('token');
    if (token) {
      // 给请求头添加 Authorization: token
      config.headers = {
        ...config.headers,
        Authorization: token
      };
    } else {
      // 1.1 小程序端跳转授权页
      /* #ifdef MP-WEIXIN */
      uni.navigateTo({ url: '/pages/auth/main' });
      /* #endif */
      // 1.2 浏览器端跳转到填表单的登录页
      /* #ifdef H5 */
      uni.navigateTo({ url: '/pages/login/main' });
      /* #endif */
    }
  }
  // 用计数器记录请求个数
  httpsCount++;
  // 请求前添加 loading 提示
  uni.showLoading({
    title: '加载中'
  });
  // console.log('请求时发送的东西', config);
  // 在发送请求之前做些什么
  return config;
}, function (error) {
  // 对请求错误做些什么
  return Promise.reject(error);
});

// 添加响应拦截器
$https.interceptors.response.use(function (response) {
  // 完成一个请求，计数器就减少 1
  httpsCount--;
  // 如果为 0，代表所有请求结束，就隐藏 loading
  if (httpsCount === 0) {
    // 响应后隐藏 loading 提示
    uni.hideLoading();
  }
  // 对响应数据做点什么
  // 解构出数据
  const { meta, message } = response.data;
  // 判断数据是否成功
  if (meta && meta.status === 200) {
    // 直接返回核心数据
    return message;
  } else {
    // 不能处理的格式直接返回 response
    return response;
  }
}, function (error) {
  // 对响应错误做点什么
  return Promise.reject(error);
});

export default $https;